{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "67eeaca9-00db-422f-a272-d0d1ed0483e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 695 entries, 0 to 694\n",
      "Data columns (total 17 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   ID      695 non-null    int64  \n",
      " 1   A1      695 non-null    object \n",
      " 2   A2      694 non-null    object \n",
      " 3   A3      695 non-null    float64\n",
      " 4   A4      695 non-null    object \n",
      " 5   A5      695 non-null    object \n",
      " 6   A6      695 non-null    object \n",
      " 7   A7      695 non-null    object \n",
      " 8   A8      695 non-null    float64\n",
      " 9   A9      695 non-null    object \n",
      " 10  A10     695 non-null    object \n",
      " 11  A11     695 non-null    int64  \n",
      " 12  A12     695 non-null    object \n",
      " 13  A13     695 non-null    object \n",
      " 14  A14     695 non-null    object \n",
      " 15  A15     695 non-null    int64  \n",
      " 16  A16     695 non-null    object \n",
      "dtypes: float64(2), int64(3), object(12)\n",
      "memory usage: 92.4+ KB\n",
      "None\n",
      "   ID A1     A2     A3 A4 A5 A6 A7    A8 A9 A10  A11 A12 A13  A14  A15 A16\n",
      "0   1  b  30.83  0.000  u  g  w  v  1.25  t   t    1   f   g  202    0   +\n",
      "1   2  a  58.67  4.460  u  g  q  h  3.04  t   t    6   f   g   43  560   +\n",
      "2   3  a   24.5  0.500  u  g  q  h  1.50  t   f    0   f   g  280  824   +\n",
      "3   4  b  27.83  1.540  u  g  w  v  3.75  t   t    5   t   g  100    3   +\n",
      "4   5  b  20.17  5.625  u  g  w  v  1.71  t   f    0   f   s  120    0   +\n",
      "存在缺失值的记录：\n",
      "      ID   A1     A2      A3   A4   A5   A6   A7      A8 A9 A10  A11 A12 A13  \\\n",
      "72    72    b  34.83   4.000    u    g    d   bb  12.500  t   f    0   t   g   \n",
      "85    84    a    NaN   3.500    u    g    d    v   3.000  t   f    0   t   g   \n",
      "88    87    b    NaN   0.375    u    g    d    v   0.875  t   f    0   t   s   \n",
      "94    93    b    NaN   5.000    y    p   aa    v   8.500  t   f    0   f   g   \n",
      "99    98    b    NaN   0.500    u    g    c   bb   0.835  t   f    0   t   s   \n",
      "207  203    b  24.83   2.750    u    g    c    v   2.250  t   t    6   f   g   \n",
      "211  207    a  71.58   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "248  244    a  18.75   7.500    u    g    q    v   2.710  t   t    5   f   g   \n",
      "253  249  NaN  24.50  12.750    u    g    c   bb   4.750  t   t    2   f   g   \n",
      "259  255    b    NaN   0.625    u    g    k    v   0.250  f   f    0   f   g   \n",
      "275  271    b  37.58   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "283  279    b  24.58  13.500    y    p   ff   ff   0.000  f   f    0   f   g   \n",
      "291  287    a    NaN   1.500    u    g   ff   ff   0.000  f   t    2   t   g   \n",
      "332  328  NaN  40.83   3.500    u    g    i   bb   0.500  f   f    0   f   s   \n",
      "334  330    b    NaN   4.000    y    p    i    v   0.085  f   f    0   t   g   \n",
      "335  331    b  20.42   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "351  347  NaN  32.25   1.500    u    g    c    v   0.250  f   f    0   t   g   \n",
      "379  375  NaN  28.17   0.585    u    g   aa    v   0.040  f   f    0   f   g   \n",
      "411  407    a  40.33   8.125    y    p    k    v   0.165  f   t    2   f   g   \n",
      "450  446    a    NaN  11.250    u    g   ff   ff   0.000  f   f    0   f   g   \n",
      "455  451    b    NaN   3.000    y    p    i   bb   7.000  f   f    0   f   g   \n",
      "458  454  NaN  29.75   0.665    u    g    w    v   0.250  f   f    0   t   g   \n",
      "461  457    b  34.58   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "484  480  NaN  26.50   2.710    y    p  NaN  NaN   0.085  f   f    0   f   s   \n",
      "494  490  NaN  45.33   1.000    u    g    q    v   0.125  f   f    0   t   g   \n",
      "505  501    b    NaN   4.000    u    g    x    v   5.000  t   t    3   t   g   \n",
      "520  516    b    NaN  10.500    u    g    x    v   6.500  t   f    0   f   g   \n",
      "525  521  NaN  20.42   7.500    u    g    k    v   1.500  t   t    1   f   g   \n",
      "544  540    b  80.25   5.500    u    g  NaN  NaN   0.540  t   f    0   f   g   \n",
      "597  593    b  23.17   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "603  599  NaN  20.08   0.125    u    g    q    v   1.000  f   t    1   f   g   \n",
      "606  602  NaN  42.25   1.750    y    p  NaN  NaN   0.000  f   f    0   t   g   \n",
      "613  609    b    NaN   0.040    y    p    d    v   4.250  f   f    0   t   g   \n",
      "627  623    a  25.58   0.000  NaN  NaN  NaN  NaN   0.000  f   f    0   f   p   \n",
      "631  627    b  22.00   7.835    y    p    i   bb   0.165  f   f    0   t   g   \n",
      "646  642  NaN  33.17   2.250    y    p   cc    v   3.500  f   f    0   t   g   \n",
      "678  674  NaN  29.50   2.000    y    p    e    h   2.000  f   f    0   f   g   \n",
      "\n",
      "        A14    A15 A16  \n",
      "72      NaN      0   -  \n",
      "85    300.0      0   -  \n",
      "88    928.0      0   -  \n",
      "94      0.0      0   -  \n",
      "99    320.0      0   -  \n",
      "207     NaN    600   +  \n",
      "211     NaN      0   +  \n",
      "248     NaN  26726   +  \n",
      "253    73.0    444   +  \n",
      "259   380.0   2010   -  \n",
      "275     NaN      0   +  \n",
      "283     NaN      0   -  \n",
      "291   200.0    105   -  \n",
      "332  1160.0      0   -  \n",
      "334   411.0      0   -  \n",
      "335     NaN      0   -  \n",
      "351   372.0    122   -  \n",
      "379   260.0   1004   -  \n",
      "411     NaN     18   -  \n",
      "450     NaN   5200   -  \n",
      "455     0.0      1   -  \n",
      "458   300.0      0   -  \n",
      "461     NaN      0   -  \n",
      "484    80.0      0   -  \n",
      "494   263.0      0   -  \n",
      "505   290.0   2279   +  \n",
      "520     0.0      0   +  \n",
      "525   160.0    234   +  \n",
      "544     0.0    340   -  \n",
      "597     NaN      0   +  \n",
      "603   240.0    768   +  \n",
      "606   150.0      1   -  \n",
      "613   460.0      0   -  \n",
      "627     NaN      0   +  \n",
      "631     NaN      0   -  \n",
      "646   200.0    141   -  \n",
      "678   256.0     17   -  \n",
      "删除缺失值后的数据集大小: (658, 17)\n",
      "重复记录数量: 5\n",
      "A1     12\n",
      "A2     12\n",
      "A4      6\n",
      "A5      6\n",
      "A6      9\n",
      "A7      9\n",
      "A14    13\n",
      "dtype: int64\n",
      "用均值填补后的数据集：\n",
      "   ID A1     A2     A3 A4 A5 A6 A7    A8 A9 A10  A11 A12 A13    A14  A15 A16\n",
      "0   1  b  30.83  0.000  u  g  w  v  1.25  t   t    1   f   g  202.0    0   +\n",
      "1   2  a  58.67  4.460  u  g  q  h  3.04  t   t    6   f   g   43.0  560   +\n",
      "2   3  a  24.50  0.500  u  g  q  h  1.50  t   f    0   f   g  280.0  824   +\n",
      "3   4  b  27.83  1.540  u  g  w  v  3.75  t   t    5   t   g  100.0    3   +\n",
      "4   5  b  20.17  5.625  u  g  w  v  1.71  t   f    0   f   s  120.0    0   +\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hao\\AppData\\Local\\Temp\\ipykernel_26284\\2742335655.py:16: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
      "  data.replace(\"?\", np.nan, inplace=True)\n",
      "D:\\ProgramData\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30452 (\\N{CJK UNIFIED IDEOGRAPH-76F4}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\ProgramData\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26041 (\\N{CJK UNIFIED IDEOGRAPH-65B9}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\ProgramData\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22270 (\\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\ProgramData\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30418 (\\N{CJK UNIFIED IDEOGRAPH-76D2}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\ProgramData\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29366 (\\N{CJK UNIFIED IDEOGRAPH-72B6}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAIhCAYAAAAozRucAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABtsklEQVR4nO3deXxU1f3/8fedmWSyTxKyQwgBguwuoAhYQQUqLrVfWn+urdQuKmqltsVSrMZ+FVrbUrRutUWlImJttV+1asENtYACsoOsIYQlJJBkJutkmfv7I2QkJkgSktyZyev5eMwDctfPAeL1nXPuOYZpmqYAAAAAAEC3s1ldAAAAAAAAPRWhHAAAAAAAixDKAQAAAACwCKEcAAAAAACLEMoBAAAAALAIoRwAAAAAAIsQygEAAAAAsAihHAAAAAAAixDKAQAAAACwCKEcAAAAAACLEMqBEPLoo4/KMAwNHz681f2HDx/Wvffeq7FjxyopKUlxcXEaNWqUnn76aTU0NJzy+gMGDFB8fPxJP88++2yXHAcAABrxrAdCj8PqAgB0nmeeeUaStHXrVn3yyScaM2ZMs/3r1q3T3/72N333u9/Vr371K4WFhemtt97SbbfdptWrV/vPPxm3262jR4/K4Wj5n457771XXq+3S44DAACNeNYDoYdQDoSItWvXauPGjbr88sv173//WwsXLmzxoB4/frz27NmjsLAw/7bJkyertrZWjz/+uB544AFlZmZ2d+kAAKANeNYDoYnh60CIWLhwoSTpN7/5jcaNG6elS5eqqqqq2TEJCQnNHtJNzjvvPEnSgQMHur5QAADQITzrgdBEKAdCQHV1tV588UWde+65Gj58uG6++WaVl5fr5ZdfbtP57733nhwOhwYNGtTFlQIAgI7gWQ+ELkI5EAL+8Y9/yO126/vf/74k6ZprrlFMTIz/J+pfZdmyZXr++ed15513qlevXl1dKgAA6ACe9UDoIpQDIWDhwoWKjIzUtddeK0mKiYnR1VdfrY8++ki7du066XmfffaZ/t//+386//zzNW/evO4qFwAAtBPPeiB0EcqBILd79259+OGHuvzyy2WapsrKylRWVqZvf/vbknTSWVbXr1+vyZMnKycnR2+++aacTmd3lg0AANqIZz0Q2gjlQJB75plnZJqm/vGPfyghIcH/ufzyyyVJixYtarEu6fr1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wze+8Q2NGTNGkuRyuXT//fe3uH5r13388cfVv3//Zsef6rinnnqqTddp733b+3fTWdfriA7FvrPOOktnnnmm/zN06FDV1tbqs88+04gRIzq7xh5l39FKSVJd6WHez2+HK4fEq+5YgbwN0qd5JVaXAwAAAEhqHBb9xBNP6Pzzz5fb7dbYsWP14IMP6tNPP9XYsWM1duxY1dTUSJJsNptee+01jRs3TosXL9bUqVO1dOlS2WyNsW3MmDF65JFHNGrUKJ1zzjl65JFHNHbsWDmdTj3xxBNqaGho9d5N9xw2bJicTqdef/11jR07Vueff77ef/99jRkzRrW1tf561qxZowcffFDjxo2T2+3W+eefryeffNJ//dauGxUVpWHDhunBBx/U2LFj9eSTT6q2tvYrjzv//PP18ssv6/zzz//K67T3vl/+czjV301nXa+jOjR8/Y9//GOr23Nzc1VRUXFaBfV0TT3l9WWHJQ2ztpgg4rAZKnlvoVKvztWGgjINTY9Trxin1WUBALqA1+uV1/vFUpgej6dL7pOfn98l1+1OodCGYMKfN1r7N7Bp0yYVFhbqmmuu0apVq/SrX/1KW7ZsUWFhoX71q19Jkm6//XZJks/n0+eff64bbrhBt99+uzZt2uTfLkl9+vTxB3SpMcTfeOONWrVqlQoLC7Vp0yadffbZLe79q1/9yn/eidt27typ1atXq3fv3lq9enWzerZs2eKvo6n2puu3dt0Ta2o67//+7/++8rjzzjtPq1at0nnnnfeV12nvfb/853AynX29jurUd8pvvPFGnXfeefr973/fmZftUfYda+wpry89bHElwadm71r1jjF0sMLUBzuLNe3s3ow2AIAQNG/ePD3wwANdfp+HHnqoy++B0MK/GbSmpKRxFKfT2dhhlJ2drVWrVvl/39rxY8eObXZukxN/INnkxGt8+fimr1s7Jjs72/9DhNra2laPa6qjqfamc1u7bms1HTp06CuPa7pu068nu0577/vlP4eT6ezrdVSnhvJVq1YpIiKiMy/Z4+Qfa+wprytr3wQQaDQqxaHCqnodKK3WziMVOiMt1uqSAACdbPbs2br77rv9X3s8HmVmZnb6febMmaOsrKxOv253ys/PJyh2o1D4N4PT09r3XNPs6k2BOi8vz78tLy+vxTUSExP925uOa9JaeD3xGl8+/sT7DBs2rMW2ppqaZnf/8rWavm46runc1q7bWk0ZGRlfeVzTdVv7YcOJ12nvfb/853AynX29jupQKJ82bVqzr03T1OHDh7V27Vr/kAd0TFMory89ZHElwSkm3NC5/RK0em+JPtpdrOykaIU7mDEPAEKJ0+k8aa9KZ8rKytKgQYO6/D4IHfybQWtGjhyptLQ0ffrpp0pLS9MLL7ygBx54QGlpaVq8eLEkKSUlRUVFRbLZbBo8eLD+93//V+np6Ro5cqTq6+tls9nk8/l04MAB+Xw+/1Brn8+nxYsXy+l0KiEhwb/M2Zfv/cILL+jBBx+UzWbzb1u8eLFM05TdbtfBgweb1ZOenq7hw4fr/vvv99feVM/JrtvE5/PphRdeUHp6uq666ir985//POlxn376qex2uz799FNdddVVJ71Oe+/75T+HU/3ddNb1OqpDacXlcjX7JCYmauLEiXrzzTd1//33d3aNPUZdg08Hy6olSfX0lHfYqL4JckWGqdLboE/yjlldDgAAAHowu92uGTNmaPXq1XK5XFq1apXuvfde//vUJ4429vl8+sY3vqGVK1fqhhtu0Jtvvqlrr73W/075J598orvuukvr1q3TunXrdNddd2nVqlXyer2aMWNGi3W1m+7ddM+tW7fK6/Xqyiuv1KpVq7R69WpNnDhRn3zyicLDw/31jB49Wvfee69Wrlwpl8ul1atX67bbbvNfv7XrVlVVaevWrbr33nu1atUq3XbbbQoPD//K41avXq2rr75aq1ev/srrtPe+bV1fvLOv11Ed6il/9tlnO7sOSDpYWq0Gnymn3VBDBTOId5TDbtOEQcl6beMhJn0DAACA5S688EI98MADeuKJJ2Sapj755JNm+/fv3+//fV1dnST55+my2+269tpr/euUb968WT/96U/9x59qnfIT7900oVzTeZL07rvvtqjh9ddf9//e4/HogQceaHH9k103PT292fFtOW7o0KGnvE5779tWnX29jjitd8rXrVun7du3yzAMDR06tEtnpOsJ8o/PvJ4eF6adMi2uJrhlJ0Wrf1K09h6tZNI3AAAAWO7CCy/U+PHjtWnTJh09elRlZWWKj4/3v69cVlamxMREDR48WG+88YYOHTqkjIwMXXXVVf53vsePH68NGzZow4YNkhqXqj7rrLNO2ZN74r1LSkqUmJjoH5LdtK0ppJeUlPhrS0pK0siR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",
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "潜在异常值的上下限: -0.8387500000000081, 61.671250000000015\n",
      "处理后的数据集已保存到 D:\\daxue\\大三\\数据挖掘\\processed_data.xlsx\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd  \n",
    "import numpy as np \n",
    "import matplotlib.pyplot as plt  \n",
    "import seaborn as sns  \n",
    "from sklearn.preprocessing import OrdinalEncoder  \n",
    "\n",
    "# 加载数据集  \n",
    "file_path = r'D:\\daxue\\大三\\数据挖掘\\crx_dataV1.xls'  \n",
    "data = pd.read_excel(file_path)  \n",
    "\n",
    "# 显示数据集的基本信息  \n",
    "print(data.info())  \n",
    "print(data.head())  \n",
    "\n",
    "# 将 \"?\" 替换为 NaN  \n",
    "data.replace(\"?\", np.nan, inplace=True)  \n",
    "\n",
    "# 找出存在缺失值的记录  \n",
    "missing_records = data[data.isnull().any(axis=1)]  \n",
    "print(\"存在缺失值的记录：\")  \n",
    "print(missing_records)  \n",
    "\n",
    "\n",
    " #删除具有缺失值的记录  \n",
    "data_dropped = data.dropna()  \n",
    "print(f'删除缺失值后的数据集大小: {data_dropped.shape}')   \n",
    "\n",
    "\n",
    "# 检查重复记录  \n",
    "duplicates = data.duplicated().sum()  \n",
    "print(f'重复记录数量: {duplicates}')  \n",
    "\n",
    "# 删除重复记录  \n",
    "data = data.drop_duplicates()  \n",
    "\n",
    "# 检查缺失值  \n",
    "missing_values = data.isnull().sum()  \n",
    "print(missing_values[missing_values > 0])  \n",
    "\n",
    "# 数值型列填充（用均值填补）  \n",
    "numeric_cols = data.select_dtypes(include=['float64', 'int64']).columns  \n",
    "data_mean_filled = data.copy()  \n",
    "data_mean_filled[numeric_cols] = data_mean_filled[numeric_cols].fillna(data_mean_filled[numeric_cols].mean())  # 均值填充  \n",
    "\n",
    "# 字符型列填充（用 'missing' 填补）  \n",
    "categorical_cols = data.select_dtypes(include=['object']).columns  \n",
    "data_mean_filled[categorical_cols] = data_mean_filled[categorical_cols].fillna('missing')  # 这里用 'missing' 填补  \n",
    "\n",
    "print(\"用均值填补后的数据集：\")  \n",
    "print(data_mean_filled.head()) \n",
    "\n",
    "# 直方图  \n",
    "plt.figure(figsize=(12, 6))  \n",
    "plt.subplot(1, 2, 1)  \n",
    "sns.histplot(data['A2'], bins=30, kde=True)  \n",
    "plt.title('A2 直方图')  \n",
    "\n",
    "# 盒状图  \n",
    "plt.subplot(1, 2, 2)  \n",
    "sns.boxplot(x=data['A2'])  \n",
    "plt.title('A2 盒状图')  \n",
    "plt.show()  \n",
    "\n",
    "# 分析潜在的异常值（通过盒状图的上下限判断）  \n",
    "Q1 = data['A2'].quantile(0.25)  \n",
    "Q3 = data['A2'].quantile(0.75)  \n",
    "IQR = Q3 - Q1  \n",
    "lower_bound = Q1 - 1.5 * IQR  \n",
    "upper_bound = Q3 + 1.5 * IQR  \n",
    "print(f\"潜在异常值的上下限: {lower_bound}, {upper_bound}\")  \n",
    "\n",
    "# OrdinalEncoder 对 A6 和 A7 进行编码  \n",
    "ordinal_encoder = OrdinalEncoder()  \n",
    "data[['A6', 'A7']] = ordinal_encoder.fit_transform(data[['A6', 'A7']])  \n",
    "\n",
    "# OneHotEncoder 对 A1, A4, A5, A9, A10, A12, A13 进行编码  \n",
    "data = pd.get_dummies(data, columns=['A1', 'A4', 'A5', 'A9', 'A10', 'A12', 'A13'], drop_first=True)  \n",
    "\n",
    "output_file_path = r'D:\\daxue\\大三\\数据挖掘\\processed_data.xlsx'  \n",
    "data.to_excel(output_file_path, index=False)  \n",
    "print(f'处理后的数据集已保存到 {output_file_path}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2261a2e1-bfde-47c1-b835-b0aaa8974c2a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ID       int64\n",
      "A1      object\n",
      "A2      object\n",
      "A3     float64\n",
      "A4      object\n",
      "A5      object\n",
      "A6      object\n",
      "A7      object\n",
      "A8     float64\n",
      "A9      object\n",
      "A10     object\n",
      "A11      int64\n",
      "A12     object\n",
      "A13     object\n",
      "A14     object\n",
      "A15      int64\n",
      "A16     object\n",
      "dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(data.dtypes) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "245f3119-1b49-4248-869a-d294e4bf126b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在缺失值的记录：\n",
      "Empty DataFrame\n",
      "Columns: [ID, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]\n",
      "Index: []\n"
     ]
    }
   ],
   "source": [
    "# 找出存在缺失值的记录  \n",
    "missing_records = data[data.isnull().any(axis=1)]  \n",
    "print(\"存在缺失值的记录：\")  \n",
    "print(missing_records) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e85f874c-c11a-4a1c-9ed8-3af39614da7a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "删除缺失值后的数据集大小: (690, 17)\n"
     ]
    }
   ],
   "source": [
    "# 删除具有缺失值的记录  \n",
    "data_dropped = data.dropna()  \n",
    "print(f'删除缺失值后的数据集大小: {data_dropped.shape}') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e096d659-1efb-4ace-986b-9415d54e96bd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
